package com.op.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.op.entity.Question;
import com.op.entity.QuestionBank;
import com.op.model.vo.QuestionBankOfQuestionVo;
import io.minio.errors.MinioException;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;

/**
 * (QuestionBank)表服务接口
 *
 * @author 孤焰
 * @since 2021-10-05 10:30:32
 */
public interface QuestionBankService extends IService<QuestionBank> {
    /**
     * 查询题库列表
     * @param questionBank 查询条件
     * @return 结果列表
     */
    List<QuestionBank> ownerBank(QuestionBank questionBank);

     /**
     * 插入数据
     * @param questionBank 实体数据
     * @param imgFile 图片文件
     * @return 插入结果
     * @throws IOException
     * @throws InvalidKeyException
     * @throws NoSuchAlgorithmException
     * @throws MinioException
     */
    boolean insert(QuestionBank questionBank, MultipartFile imgFile) throws IOException, InvalidKeyException, NoSuchAlgorithmException, MinioException;

    /**
     * 修改数据
     * @param questionBank 实体数据
     * @param imgFile 图片文件
     * @return 插入结果
     * @throws MinioException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws IOException
     */
    boolean updateById(QuestionBank questionBank, MultipartFile imgFile) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;

    /**
     * 插入或修改数据
     * @param questionBank 实体数据
     * @param imgFile 图片文件
     * @return 插入或修改结果
     * @throws MinioException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws IOException
     */
    boolean saveOrUpdate(QuestionBank questionBank, MultipartFile imgFile) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;

    /**
     * 修改或添加数据（审批流程）
     * 调用此函数的场景：
     * 把私有题库修改为公共题库
     * @param questionBank 实体对象
     * @param imgFile 图片文件
     * @return 添加或修改结果
     */
    boolean saveOrUpdateAudit(QuestionBank questionBank, MultipartFile imgFile) throws MinioException, NoSuchAlgorithmException, InvalidKeyException, IOException;

    /**
     * 批量逻辑删除
     * @param idList id列表
     * @return 删除结果
     */
    boolean logicDelBatchById(List<Long> idList);

    /**
     * 上传题库
     * @param userId 用户id
     * @param file excel数据文件
     * @return 上传结果
     * @throws Exception
     */
    boolean upload(Long userId, MultipartFile file) throws Exception;

    /**
     * 导出题库
     * @param bankIds 题库id列表
     * @param response http响应流
     * @return 导出结果
     */
    boolean export(List<Long> bankIds, HttpServletResponse response) throws IOException;

    /**
     * 根据题库Id和题目Id进行数据清洗
     * @param questionList 题目列表
     * @param bankIdList 题库列表
     * @return 清洗后的数据列表
     */
    List<QuestionBankOfQuestionVo> questionBelongBank(List<Question> questionList, List<Long> bankIdList);
}

